package com.star.demo.controller;

import com.star.demo.domain.ResponseResult;
import com.star.demo.domain.User;
import com.star.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

/**
 * @author star
 * @date 2023-03-11 22:12
 * @Description 测试Security
 */
@RestController
public class UserController {
    @Autowired
    private UserService userService;
    @GetMapping("/hello")
    //spel表达式：@+BeanName声明式的调用方法：在SPEL表达式中使用 @ex相当于获取容器中bean的名字未ex的对象。
    // 然后再调用这个对象的hasAuthority方法
    //@PreAuthorize("@ex.hasAuthority('system:dept:list')")
    //没有权限则hasAuthority返回false，代表不能访问这个接口
    @PreAuthorize("hasAuthority('system:dept:list')")
    //@PreAuthorize("hasAnyAuthority('test','admin','system:dept:list')")
    public String userLogin(){
        return "hello";
    }

    //不写RequestBody表示是Form表单格式的，写了代表是JSON
    @PostMapping("/user/login")
    public ResponseResult login(@RequestBody User user){
        return userService.login(user);
    }

    @GetMapping("/user/logout")
    public ResponseResult logout(){
        return userService.logout();
    }

    @GetMapping("/testCors")
    @PreAuthorize("@ex.hasAuthority('system:dept:list')")
    public String testCors(){
        return "允许跨域访问！";
    }
}
